有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用MultiResourceItemReader时,java Spring批处理在CustomLineMapper中获取文件名

我正在使用一个,并实现了inferfaceResourceAware,以获取当前的资源文件名。我在项目处理器中得到了它,它可以很好地记录有关错误的完整信息

无论如何,如果FieldSetMapper抛出异常,我想得到文件名,以注册行内容、行号和文件名,但我没有找到正确的方法

这是我目前的代码:

public class MyCustomLineMapper<T> implements LineMapper<BaseDTO>, InitializingBean  {

        private LineTokenizer tokenizer;
        private BeanWrapperFieldSetMapper<BaseDTO> fieldSetMapper;

        public BaseDTO mapLine(String line, int lineNumber) throws Exception {

            try {
                BaseDTO r = fieldSetMapper.mapFieldSet(tokenizer.tokenize(line));
                r.setLineNumber(lineNumber);
                r.setLineContent(line);
                return r;
            } catch(Exception ex){
                BaseDTO r = new BaseDTO();
                r.setError(String.format(Keys.LINE_PARSE_ERROR, lineNumber, "FILE_NAME", line));
                return r;
                /// I want use the current filename in this moment.
            }
        }

        public void setLineTokenizer(LineTokenizer tokenizer) {
            this.tokenizer = tokenizer;
        }

        public void setFieldSetMapper(BeanWrapperFieldSetMapper<BaseDTO> fieldSetMapper) {
            this.fieldSetMapper = fieldSetMapper;
        }

        public void afterPropertiesSet() {
            Assert.notNull(tokenizer, "The LineTokenizer must be set");
            Assert.notNull(fieldSetMapper, "The FieldSetMapper must be set");
        }

}

在我的项目“BaseDTO”中,我实现了ResourceAware,如下所示:

public class BaseDTO implements ResourceAware {

    protected String itemClassifier;
    protected String error;
    protected int lineNumber;
    protected String lineContent;
    protected Resource res;
    protected String fileName;

    @Override
    public void setResource(Resource res) {
        this.res = res;
        this.fileName = res.getFilename();
    }

但是,如果读取文件时出现异常(示例中的UncorrecnumberOfTokens),我需要从FieldSetMapper获取项目,并填充此字段,但异常会停止此操作。我怎样才能做到这一点

对不起我的英语。提前谢谢你的帮助


共 (0) 个答案